library(tidyverse)
library(dbplyr)
library(dplyr)
library(ggplot2)
library(splitstackshape)
library(cowplot)
library(plotly)
library(knitr)
library(ggmap)
library(maps)
library(mapdata)
library(readr)

a) (5%)

Lesum inn gögnin

setwd("~/Documents/Rstudio/Verk3/")
ki <- read.csv(file = 'data98.csv')

Hérna búum við til fall sem gefur lengdar- og breiddarbauga út frá tilkynningaskyldureitum

r2d <-function(r)
{
    lat <- floor(r/100)
    lon <- (r - lat * 100) %% 50
    halfb <- (r - 100 * lat - lon)/100
    lon <-  - (lon + 0.5)
    lat <- lat + 60 + halfb + 0.25
    data.frame(lat = lat, lon = lon)
}

Hérna búum við til vigra sem innihalda lengdar- og breiddargráður

x<-r2d(ki$reit)$lon
y<-r2d(ki$reit)$lat

Næst skiptum við fiskunum eftir hafsvæðum

hafsvaedi <- ki$reit

for (i in 1:length(x)) {
  
  if ((x[i] < -19.0) & (y[i] < 65.0)) {
    hafsvaedi[i] = "SV"
  }
  
  else if ((x[i] < -19.0) & (y[i] >= 65.0)) {
    hafsvaedi[i] = "NV"
  }
  
  else if ((x[i] >= -19.0) & (y[i] < 65.0)) {
    hafsvaedi[i] = "SA"
  }
  
  else {
    hafsvaedi[i] = "NA"
  }
  
}

Að lokum búum við til vigur sem gefur til kynna hvort fiskurinn sé kynþroska eða ekki

kt2 <- hafsvaedi

for (i in 1:length(x)) {
  if(ki$kt[i] == 1) {
    kt2[i] = "okynthroska"
  }
  else {
    kt2[i] = "kynthroska"
  }
}
ki$kt2 <- kt2

b) (12%)

Finnum fjölda kynþroska og ókynþroska fiska eftir hverju hafsvæði

kynco <- c(0,0,0,0)

for (i in 1:length(x)) {
  if ((hafsvaedi[i] == "SV") && (kt2[i] == "kynthroska")) {
    kynco[1] <- kynco[1]+1
    
  }
  else if ((hafsvaedi[i] == "SA") && (kt2[i] == "kynthroska")) {
    kynco[2] <- kynco[2] + 1
  }
  else if ((hafsvaedi[i] == "NV") && (kt2[i] == "kynthroska")) {
    kynco[3] <- kynco[3] + 1
  }
  else if ((hafsvaedi[i] == "NA") && (kt2[i] == "kynthroska"))  {
    kynco[4] <- kynco[4] + 1
  }
}
okynco <- c(0,0,0,0)

for (i in 1:length(x)) {
  if ((hafsvaedi[i] == "SV") && (kt2[i] == "okynthroska")) {
    okynco[1] <- okynco[1]+1
    
  }
  else if ((hafsvaedi[i] == "SA") && (kt2[i] == "okynthroska")) {
    okynco[2] <- okynco[2] + 1
  }
  else if ((hafsvaedi[i] == "NV") && (kt2[i] == "okynthroska")) {
    okynco[3] <- okynco[3] + 1
  }
  else if ((hafsvaedi[i] == "NA") && (kt2[i] == "okynthroska"))  {
    okynco[4] <- okynco[4] + 1
  }
}

Hérna búum við til einfaldan vigur sem geymir hafsvæðin fjögur

h <- c("SV", "SA", "NV", "NA")

Búum til töflu sem sýnir fjölda kynþroska og ókynþroska fiska eftir hverju hafsvæði

btafla <-tibble(h, kynco, okynco)
kable(btafla, col.names = c("Hafsvaedi", "Kynþroska", "Kynþroska"), align = "c")
Hafsvaedi Kynþroska Kynþroska
SV 508 221
SA 224 204
NV 394 934
NA 215 981

Finnum hlutfall milli kynþroska og ókynþroska fiska fyrir hvert hafsvæði

tafla1 <- data.frame(h, kynco, okynco)

Hérna reiknum við hlutfall kynþroska á móti ókynþroska fiska eftir hafsvæði

pkynco <- c(0,0,0,0)
for (i in 1:4) {
  pkynco[i] <- (kynco[i])/(kynco[i]+okynco[i])
  
}

Tafla sem sýnir hlutfall milli kynþroska og ókynþroska fiska fyrir hvert hafsvæði

m <- tibble(h, pkynco)
kable(m, col.names = c("Hafsvæði", "Hlutfall kynþroska á móti ókynþroska"), align = "c")
Hafsvæði Hlutfall kynþroska á móti ókynþroska
SV 0.6968450
SA 0.5233645
NV 0.2966867
NA 0.1797659

Búum til súlurit sem sýnir fjölda kynþroska og ókynþroska fiska fyrir hvert hafsvæði

p <- plot_ly(tafla1, x = tafla1$h, y = tafla1$kynco, type = 'bar', name = 'Kynþroska', marker = list(color = 'rgb(49,130,189)')) %>%
  add_trace(y = tafla1$okynco, name = 'Ókynþroska', marker = list(color = 'rgb(204,204,204)')) 
p

c) (12%)

Gerum töflu sem sýnir fjölda fiska, meðallengd, meðalþyngd og staðalfrávik lengdar eftir aldri

tafla_a1 <- ki %>% 
    group_by(aldur) %>% 
    summarise(medallengd = mean(le, na.rm=TRUE))
tafla_a2 <- ki %>% 
    group_by(aldur) %>% 
    summarise(medalthyngd = mean(osl, na.rm=TRUE))
tafla_a3 <- ki %>% 
    group_by(aldur) %>% 
    summarise(stdlengd = sd(le, na.rm=TRUE))
fjoldi <- rep(0, 15)
for(i in 1:length(x)) {
  for(j in 1:15) {
    if (ki$aldur[i] == j) {
      fjoldi[j] = fjoldi[j] + 1
    }
  }
}

fjoldi2 <- rep(0, 14)
for (i in 1:11) {
  fjoldi2[i] <- fjoldi[i]
}
for (i in 13:15) {
  fjoldi2[i-1] = fjoldi[i]
}
taflac <- tibble(tafla_a1$aldur, fjoldi2, tafla_a1$medallengd, tafla_a2$medalthyngd, tafla_a3$stdlengd)
kable(taflac, col.names = c("Aldur", "Fjöldi", "Meðallengd", "Meðalþyngd", "Staðalfrávik lengdar"), align = "c")
Aldur Fjöldi Meðallengd Meðalþyngd Staðalfrávik lengdar
1 3 22.66667 102.0000 2.081666
2 76 26.30263 165.5395 3.723868
3 632 38.55063 529.3180 5.277765
4 367 51.26158 1339.2316 7.902564
5 1211 61.44426 2132.9744 6.819454
6 750 71.43333 3424.9480 8.701102
7 262 79.19466 4767.2710 8.877858
8 209 85.25837 6407.2871 9.991354
9 135 88.51852 7266.0667 9.816109
10 27 93.85185 9392.5185 12.877242
11 6 93.66667 10665.3333 24.311863
13 1 132.00000 28282.0000 NA
14 1 145.00000 34484.0000 NA
15 1 110.00000 12750.0000 NA

Í töflunni hér fyrir ofan sést fjöldi, meðallengd, meðalþyngd og staðalfrávik lengdar eftir aldri

Hér fyrir neðan er mynd sem sýnir lengd fiska eftir aldri þegar litið er á aldur sem samfellda breytu auk meðallengd fiska fyrir hvern aldurshóp sem stærri rauða punkta

qplot(ki$aldur, ki$le, ) + geom_hline() + geom_smooth(method=loess, color = "blue") + xlab("Aldur") + ylab("Lengd") + labs(caption="") + geom_point(data=taflac$tafla_a1$medallengd, mapping=aes(x = taflac$`tafla_a1$aldur`, y = taflac$`tafla_a1$medallengd`), col="red", size=2.2)+ 
  theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))
## `geom_smooth()` using formula 'y ~ x'

Kassarit sem sýnir lengd fiska eftir aldri þegar litið er á aldur sem strjála breytu

ggplot(ki,mapping = aes(x=aldur,y=le, group=aldur))+geom_boxplot()+xlab('Aldur')+ylab('Lengd')

Eins og sést á myndini fyrir ofan er þó nokkrir útlagar.

Hvor mynd hefur sýna kosti, punktaritið sýnir vel þróun á lengd eftir aldri á meðan kassaritið sýnir dreifingu á lengd fyrir hvern aldur.

d) (5%)

Veljum tvö hafsvæði af handahófi

set.seed(3008)
(ivan <- sample(ki$reit,1))
## [1] 623
set.seed(0411)
(kolli <- sample(ki$reit,1))
## [1] 666

Veljum 50 fiska af handahófi af hvoru hafsvæði

set.seed(3008)
ivan_t <- ki
ivan_t <- filter(ivan_t, reit == 623)
ivan_t_50 <- sample_n(ivan_t,50)
set.seed(0411)
kolli_t <- ki
kolli_t <- filter(kolli_t, reit == 666)
kolli_t_50 <- sample_n(kolli_t,50)

Sameinum fiskana í einn gangaramma

samtafla <- rbind(kolli_t_50, ivan_t_50)

e) (15%)

Hérna erum við að kanna hvort munur sé á meðallengd fiska á hafsvæðunum tveimur. Við notum tvíhliða t-próf með 95% marktæknikröfu. Við setjum fram tilgátunar:

\(H_0:\) Hafsvæðið hefur ekki áhrif á meðallengd fiska þ.e. \(\mu_1 = \mu_2\)

\(H_1:\) Hafsvæðið hefur áhrif á meðallengd fiska þ.e. \(\mu_1 \neq \mu_2\)

Við getum notað þetta tilgátupróf vegna þess að gögnin fylgja normaldreifingu sem er undirstaða fyrir t-prófið.

t0 <- t.test(samtafla$le~samtafla$reit, mu = 0, alt = "two.sided", conf = 0.95, var.eq = T, paired = F)
t0
## 
##  Two Sample t-test
## 
## data:  samtafla$le by samtafla$reit
## t = 1.3425, df = 98, p-value = 0.1825
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -2.084966 10.804966
## sample estimates:
## mean in group 623 mean in group 666 
##             56.72             52.36

Við fáum t-gildið 1.3425 sem sýnir að meðaltölin eru 1.3425 staðalfrávikum frá hvort öðru. P-gildið er 0.1825 sem segir okkur að það voru 18.25% líkur á að fá þessa niðurstöðu. Þetta bil er stærra heldur en 5% höfnunarsvæðið þannig að við samþykkjum \(H_0\). 95% öryggisbilið er frá -2.08 til 10.80. Öryggisbilið inniheldur 0 vegna þess að við samþykkjum núlltilgátuna og líklegt er að það er enginn mismunur á meðllengd fiska eftir hafsvæði.

f) (12%)

ki$hafsvaedi <- hafsvaedi

Teiknum stuðlarit af lengd fiskanna fyrir hvert hafsvæði með lengdarmælingar úr upphaflega gagnasafninu og bætum inn á stuðlaritin þéttleikafall þeirra

ggplot(ki, aes(x=le)) + geom_histogram(aes(y=..density..), colour="black", fill="white", binwidth = 3) +     geom_density(alpha=.2, fill="#FF6666", color = "red") + xlab('Lengd') + ylab('Fjöldi %') + facet_wrap(~ hafsvaedi) + labs(caption="") + 
  theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))

Eins og sést á myndunum fjórum fylgja þær normaldreifingu sem gefur til kynna að flestir fiskar eru í kring um meðallengd og fara þeir fækkandi því nær dregur endapunktum. Þetta gerir okkur einnig kleift að nota t-próf á gögnin.

g) (5%)

Hérna framkvæmum við 5000 mismunandi t-próf með slembnum stökum

t_vector <- replicate(5000, t.test(samtafla$le[sample(1:length(samtafla$le))]~samtafla$reit )$statistic
)
pefri <- 0
for (i in 1:5000) {
  if ( abs(t_vector[i]) > t0$statistic) {
    pefri <- pefri +1
  }
  p <- pefri/5000
}
p
## [1] 0.1912

Með því að framkvæma slembivalspróf fyrir hafsvæðin tvö fáum við p-gildið 0.192. Þetta segir okkur að það eru 19.2% líkur á að við fengum þessu niðurstöðu. Ef við gerum 95% marktæknikröfu þá er niðurstaðan fyrir utan höfnunarsvæðið þannig hægt er að álykta það að enginn marktækur munur er á meðallengd fiska eftir hafsvæðunum tvem. P-gildið sem við fengum úr t-prófinu er 0.183 en p-gildið úr slembivalsprófinu er 0.192. Þessar tölur gefa sömu niðurstöðu þ.e. það er enginn marktækur munur á hafsvæðunum.

h) (15%)

Hérna búum við til vigur sem inniheldur kynþroska fisksins sem tölubreyti þ.e. ef fiskurinn er ókynþroska fær hann gildið 1 en ef hann er kynþroska fær hann gildið 2

kt3 <- samtafla$kt
for (i in 1:100) {
  if (samtafla$kt[i] == 1) {
    kt3[i] <- 1
  }
  else {
    kt3[i] <- 2
  }
}
samtafla$kt3 <- kt3

Hérna búum við til vigur yfir fjölda kynþroska fiska eftir hafsvæði

kynco_1 <- c(0,0)

for (i in 1:100) {
  if ((samtafla$reit[i] == "623") && (samtafla$kt2[i] == "kynthroska")) {
    kynco_1[1] <- kynco_1[1] + 1
  }
  else if ((samtafla$reit[i] == "666") && (samtafla$kt2[i] == "kynthroska"))  {
    kynco_1[2] <- kynco_1[2] + 1
  }
}

Hérna búum við til vigur yfir fjölda ókynþroska fiska eftir hafsvæði

okynco_1 <- c(0,0)

for (i in 1:100) {
  if ((samtafla$reit[i] == "623") && (samtafla$kt2[i] == "okynthroska")) {
    okynco_1[1] <- okynco_1[1] + 1
  }
  else if ((samtafla$reit[i] == "666") && (samtafla$kt2[i] == "okynthroska"))  {
    okynco_1[2] <- okynco_1[2] + 1
  }
}
hafsvaedi_1 <- c("623","666")

Hér fyrir neðan er tafla sem sýnir fjölda kynþroska og ókynþroska fiska eftir hafsvæði

tafla_h <- tibble(hafsvaedi_1,okynco_1,kynco_1)
kable(tafla_h, col.names = c("Hafsvæði", "Óynþroska", "Kynþroska"), align = "c")
Hafsvæði Óynþroska Kynþroska
623 41 9
666 39 11

Af töflunni fyrir ofan er hægt að álykta að lítill munur er á hlutfalli kynþroska á mót ókynþroska fiska miðað við hafsvæði

Gerum t-próf til að kanna ályktunina.

\(H_0:\) Enginn munur er á hlutfalli á kynþroska á móti ókynþroska fiska milli hafsvæða þ.e. \(\mu_1 = \mu_2\)

\(H_1:\) Munur er á hlutfalli kynþroska á móti ókynþroska fiska milli hafsvæða þ.e. \(\mu_1 \neq \mu_2\).

t1 <- t.test(samtafla$kt3~samtafla$reit, mu = 0, alt = "two.sided", conf = 0.95, var.eq = T, paired = F)
t1
## 
##  Two Sample t-test
## 
## data:  samtafla$kt3 by samtafla$reit
## t = -0.49559, df = 98, p-value = 0.6213
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.2001686  0.1201686
## sample estimates:
## mean in group 623 mean in group 666 
##              1.18              1.22

Við fáum t-gildið -0.496, p-gildið 0.621 og öryggisbilið er frá -0.20 til 0.12. P-gildið segir okkur að það eru 62.13% líkur á að fá þessa niðurstöðu og öryggisbilið inniheldur 0 sem segir okkur að líklegt er að það er enginn munur á hlutfalli kynþroska á móti ókynþroska eftir hafsvæði.

i) (12%)

Hérna notum fyrra hafsvæðið og teiknum punktarit á venjulegum kvarða. Rauða línan er jafna besta ferils með óvissu.

qplot(ivan_t_50$le, ivan_t_50$osl) + geom_hline() + geom_smooth(method=loess, color = "red") + xlab("Lengd") + ylab("Þyngd") + labs(caption="") + 
  theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))
## `geom_smooth()` using formula 'y ~ x'

Hérna teiknum punktarit af sama hafsvæði nema með log-log kvarða. Rauða línan er jafna besta ferils með óvissu.

qplot(ivan_t_50$le, ivan_t_50$osl, log ="xy") + geom_hline() + geom_smooth(method=loess, color = "red") + xlab("Lengd") + ylab("Þyngd") + labs(caption="") + 
  theme(plot.caption = element_text(hjust=0.5, size=rel(1.2)))
## `geom_smooth()` using formula 'y ~ x'

Bý til nýjan gagnaramma sem inniheldur logrann af þyngd og lengd fiskanna.

log_le <- log(ivan_t_50$le,10)
log_osl <- log(ivan_t_50$osl, 10)
log_df <- tibble(log_le,log_osl)
rm(log_le)
rm(log_osl)

Hér smíði ég aðhvarfsgreiningarlíkan sem spáir þyngd fisks út frá lengd á log-log skala.

fit <- lm(log_le~log_osl, data = log_df)
fit
## 
## Call:
## lm(formula = log_le ~ log_osl, data = log_df)
## 
## Coefficients:
## (Intercept)      log_osl  
##      0.6842       0.3374

Aðhvarfsgreiningarlíkanið segir að lengd fylgi best línunni með jöfnunni:

\(lengd = 0.6842 + 0.3374 \cdot þyngd\)

Hér fyrir neðan sést mynd af líkaninu

ggplot(log_df, aes(log_le, log_osl)) +
  geom_point() +
  stat_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'

Lengd og þyngd fisks fylgir að eðli sínu lógarithmískum skala þannig ef við teiknum mynd af fylgninni á log-log skala eins og sést hér fyrir ofan myndast góð línuleg fylgni sem létt er að lesa af. Þetta er ástæða af hverju það er oft sniðugt að nota log-log skalann.

j) (4%)

Hér fyrir neðan er mynd sem sýnir fylgni á þyngd og lengd fiska þar sem þyngd er háða breytan á log-log skala.

ggplot(log_df, aes(log_osl, log_le)) +
  geom_point() +
  stat_smooth(method = lm, color = "red",se = FALSE)
## `geom_smooth()` using formula 'y ~ x'

Hérna er mynd sem sýnir fylgni og lengd fiska þar sem þyngd er háða breytan á venjulegum skala.

ggplot(ivan_t_50, aes(osl,le)) +
  geom_point() + geom_smooth(method = "loess")
## `geom_smooth()` using formula 'y ~ x'

Eins og sést fyrir ofan þá er ekki línulegt samband milli þyngdar og lengdar.

k) (3%)

Búum til aðhvarfsgreiningarlíkön fyrir gögnin okkar. litid gefur okkur bestu línu í gegnum alla punktana, stort gefur okkur margar bestu línur þar sem litið er á aldur sem flokkabreytu, þ.e. fáum jöfnu línu fyrir hvern aldur.

litid <- lm(le~aldur, data=ivan_t_50)
stort <- lm(le~factor(aldur), data=ivan_t_50)

Hér fyrir neðan sést kassarit sem sýnir hvernig lengd fiska dreifist aldri.

ggplot(ivan_t_50,mapping = aes(x=aldur,y=le, group=aldur))+geom_boxplot()+xlab('Aldur')+ylab('Lengd')

Hér sést puntkarit sem sýnir einnig hvernig lengd dreifist aldri ásamt jöfnu besta ferils auk óvissu.

ggplot(ivan_t_50, aes(aldur,le)) +
  geom_point() + geom_smooth(method=loess)
## `geom_smooth()` using formula 'y ~ x'

Hérna eru aðhvarfsgreiningarlíkönin

litid
## 
## Call:
## lm(formula = le ~ aldur, data = ivan_t_50)
## 
## Coefficients:
## (Intercept)        aldur  
##      18.751        7.655
stort
## 
## Call:
## lm(formula = le ~ factor(aldur), data = ivan_t_50)
## 
## Coefficients:
##     (Intercept)   factor(aldur)3   factor(aldur)4   factor(aldur)5  
##           25.00            12.83            23.00            34.26  
##  factor(aldur)6   factor(aldur)7   factor(aldur)9  factor(aldur)11  
##           41.09            56.00            61.00            59.00

Búum til anova töflu

anova(litid, stort)
## Analysis of Variance Table
## 
## Model 1: le ~ aldur
## Model 2: le ~ factor(aldur)
##   Res.Df    RSS Df Sum of Sq      F   Pr(>F)   
## 1     48 2038.8                                
## 2     42 1293.4  6    745.41 4.0342 0.002797 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Við fáum p-gildið 0.002797 sem segir okkur að það sé yfirgnæfandi líkur á að það sé fylgni milli lengd og aldurs. Einnig sést á myndunum tvem fyrir ofan sérstaklega í punktaritinu að það er jákvæð fylgni milli lengds og aldurs.